// 导入 http 模块
import http from 'wechat-http'

/**
 * 配置接口基础路径
 */
http.baseURL = 'https://live-api.itheima.net'
/**
 * 挂载方法到全局
 */
wx.http = http
// 配置请求截器
http.intercept.request = (config) => {
  // config 是请求相关的信息
  // console.log(config);
  // 统一为每一个接口添加 Authorization 请求头，值是 token
  const token = getApp().token
  // token 存在 并且 当前调用的接口不是刷新 token 接口时，才加上请求 Authorization = token
  if (token && !config.url.includes('/refreshToken')) {
    //     如果请求信息中有 header，就使用 header 本身，如果没有header，给它赋值为
    // 个空对象
    config.header = config.header || {}
    // 将 token 添加到 请求头中
    config.header.Authorization = token
  }

  return config
}
// 配置响应拦截器
http.intercept.response = async ({ statusCode, data, config }) => {
  if (statusCode === 401) {
    if (config.url.includes('/refreshToken')) {

      //  获取页面历史栈
      const pageStack = getCurrentPages()
      // 取出当前页面路径，登录成功能跳转到该页面
      const currentPage = pageStack[pageStack.length - 1]
      // 跳转到登录页面
      wx.redirectTo({
        url: `/pages/login/index?returnUrl=/${currentPage.route}`
      })
      return res.data
    }
    // 如果没有 refresh_token，也就没有必要调用刷新 token 的接口
    if (!getApp().refresh_token) return
    // 调用刷新 token 的接口
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        // 这时要注意使用的是 refresh_token
        Authorization: getApp().refresh_token
      }
    })
    // 更新 token 和 refresh_token
    getApp().setToken(res.data.token, res.data.refreshToken)
  }
  return data
}
/**
 * 模块导出
 */
export default http